home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / if_packet.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  3KB  |  151 lines

  1. #ifndef __LINUX_IF_PACKET_H
  2. #define __LINUX_IF_PACKET_H
  3.  
  4. #include <linux/types.h>
  5.  
  6. struct sockaddr_pkt
  7. {
  8.     unsigned short spkt_family;
  9.     unsigned char spkt_device[14];
  10.     __be16 spkt_protocol;
  11. };
  12.  
  13. struct sockaddr_ll
  14. {
  15.     unsigned short    sll_family;
  16.     __be16        sll_protocol;
  17.     int        sll_ifindex;
  18.     unsigned short    sll_hatype;
  19.     unsigned char    sll_pkttype;
  20.     unsigned char    sll_halen;
  21.     unsigned char    sll_addr[8];
  22. };
  23.  
  24. /* Packet types */
  25.  
  26. #define PACKET_HOST        0        /* To us        */
  27. #define PACKET_BROADCAST    1        /* To all        */
  28. #define PACKET_MULTICAST    2        /* To group        */
  29. #define PACKET_OTHERHOST    3        /* To someone else     */
  30. #define PACKET_OUTGOING        4        /* Outgoing of any type */
  31. /* These ones are invisible by user level */
  32. #define PACKET_LOOPBACK        5        /* MC/BRD frame looped back */
  33. #define PACKET_FASTROUTE    6        /* Fastrouted frame    */
  34.  
  35. /* Packet socket options */
  36.  
  37. #define PACKET_ADD_MEMBERSHIP        1
  38. #define PACKET_DROP_MEMBERSHIP        2
  39. #define PACKET_RECV_OUTPUT        3
  40. /* Value 4 is still used by obsolete turbo-packet. */
  41. #define PACKET_RX_RING            5
  42. #define PACKET_STATISTICS        6
  43. #define PACKET_COPY_THRESH        7
  44. #define PACKET_AUXDATA            8
  45. #define PACKET_ORIGDEV            9
  46. #define PACKET_VERSION            10
  47. #define PACKET_HDRLEN            11
  48. #define PACKET_RESERVE            12
  49. #define PACKET_TX_RING            13
  50. #define PACKET_LOSS            14
  51.  
  52. struct tpacket_stats
  53. {
  54.     unsigned int    tp_packets;
  55.     unsigned int    tp_drops;
  56. };
  57.  
  58. struct tpacket_auxdata
  59. {
  60.     __u32        tp_status;
  61.     __u32        tp_len;
  62.     __u32        tp_snaplen;
  63.     __u16        tp_mac;
  64.     __u16        tp_net;
  65.     __u16        tp_vlan_tci;
  66. };
  67.  
  68. /* Rx ring - header status */
  69. #define TP_STATUS_KERNEL    0x0
  70. #define TP_STATUS_USER        0x1
  71. #define TP_STATUS_COPY        0x2
  72. #define TP_STATUS_LOSING    0x4
  73. #define TP_STATUS_CSUMNOTREADY    0x8
  74.  
  75. /* Tx ring - header status */
  76. #define TP_STATUS_AVAILABLE    0x0
  77. #define TP_STATUS_SEND_REQUEST    0x1
  78. #define TP_STATUS_SENDING    0x2
  79. #define TP_STATUS_WRONG_FORMAT    0x4
  80.  
  81. struct tpacket_hdr
  82. {
  83.     unsigned long    tp_status;
  84.     unsigned int    tp_len;
  85.     unsigned int    tp_snaplen;
  86.     unsigned short    tp_mac;
  87.     unsigned short    tp_net;
  88.     unsigned int    tp_sec;
  89.     unsigned int    tp_usec;
  90. };
  91.  
  92. #define TPACKET_ALIGNMENT    16
  93. #define TPACKET_ALIGN(x)    (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
  94. #define TPACKET_HDRLEN        (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
  95.  
  96. struct tpacket2_hdr
  97. {
  98.     __u32        tp_status;
  99.     __u32        tp_len;
  100.     __u32        tp_snaplen;
  101.     __u16        tp_mac;
  102.     __u16        tp_net;
  103.     __u32        tp_sec;
  104.     __u32        tp_nsec;
  105.     __u16        tp_vlan_tci;
  106. };
  107.  
  108. #define TPACKET2_HDRLEN        (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
  109.  
  110. enum tpacket_versions
  111. {
  112.     TPACKET_V1,
  113.     TPACKET_V2,
  114. };
  115.  
  116. /*
  117.    Frame structure:
  118.  
  119.    - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
  120.    - struct tpacket_hdr
  121.    - pad to TPACKET_ALIGNMENT=16
  122.    - struct sockaddr_ll
  123.    - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
  124.    - Start+tp_mac: [ Optional MAC header ]
  125.    - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
  126.    - Pad to align to TPACKET_ALIGNMENT=16
  127.  */
  128.  
  129. struct tpacket_req
  130. {
  131.     unsigned int    tp_block_size;    /* Minimal size of contiguous block */
  132.     unsigned int    tp_block_nr;    /* Number of blocks */
  133.     unsigned int    tp_frame_size;    /* Size of frame */
  134.     unsigned int    tp_frame_nr;    /* Total number of frames */
  135. };
  136.  
  137. struct packet_mreq
  138. {
  139.     int        mr_ifindex;
  140.     unsigned short    mr_type;
  141.     unsigned short    mr_alen;
  142.     unsigned char    mr_address[8];
  143. };
  144.  
  145. #define PACKET_MR_MULTICAST    0
  146. #define PACKET_MR_PROMISC    1
  147. #define PACKET_MR_ALLMULTI    2
  148. #define PACKET_MR_UNICAST    3
  149.  
  150. #endif
  151.